package suanfa;

import java.util.HashMap;
//给定一个整数数组 nums 和一个整数 k ，返回其中元素之和可被 k 整除的非空 子数组 的数目。
//子数组 是数组中 连续 的部分。
//示例 1：
//输入：nums = [4,5,0,-2,-3,1], k = 5
//输出：7
//解释：
//有 7 个子数组满足其元素之和可被 k = 5 整除：
//[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
//示例 2:
//输入: nums = [5], k = 9
//输出: 0
public class subarraysDivByK {
    public int subarraysDivByK(int[] nums, int k) {
        HashMap<Integer,Integer> hash=new HashMap<>();
        hash.put(0%k,1);
        int sum=0,ret=0;
        for(int x: nums){
            sum+=x;
            //为什么要加上k再除以k是因为万一前缀和为负数
            //给前缀和转换为整数。
            int r=(sum%k+k)%k;
            ret+=hash.getOrDefault(r,0);
            hash.put(r,hash.getOrDefault(r,0)+1);
        }
        return ret;
    }
}
